#ifndef _WT588F_APP_H_
#define _WT588F_APP_H_

#include "wt588f_board.h"

#if _VOICE_PLAY_TYPE_ == _VOICE_PLAY_SPEAKER_

// 播放间隔
#define WT588F_PLAYBACK_INTERVAL                   (100ul)
// 等待电平稳定时间
#define WT588F_WAIT_LEVEL_STABILIZATION_TIME       (70ul)

// 播放超时时间 - 10s
#define WT588F_PLAYBACK_TIMEOUT                    (60000ul / WT588F_PLAYBACK_INTERVAL)

/**
 * @brief 音频播放步骤
 *
 */
typedef enum
{
  VOICE_PLAY_IDLE,       // 空闲
  VOICE_PLAY_INIT,       // 初始化
  VOICE_SET_VOLUME,      // 设置音量
  VOICE_PLAY_AUDIO,      // 播放音频
  VOICE_PLAY_GET_FILE,   // 获取音频文件
  VOICE_PLAY_WAIT_FINSH, // 等待播放完毕
} VoicePlayStep_t;

/**
 * @brief 状态位
 *
 */
typedef struct
{
  VoicePlayStep_t Step;                 // 播放步骤
  uint16_t AccumulatedTimeOfDeviceBusy; // 设备忙累计时间
} Wt588fStatusBit_t;

/**
 * @brief 删除所有语音文件
 *
 */
extern void Wt588fDeleteAllAudioFile(void);

/**
 * @brief 播放系统启动音效
 *
 */
extern void Wt588fPlayStartupAudio(void);

/**
 * @brief 播放按键音
 *
 */
extern void Wt588fPlayKeypadToneAudio(void);

/**
 * @brief 播放警报音
 *
 */
extern void Wt588fPlayAlarmAudio(void);

/**
 * @brief 播放门铃音效
 *
 */
extern void Wt588fPlayDoorbellAudio(void);

/**
 * @brief 播放切换人脸鉴权模式音效
 *
 */
extern void Wt588fPlaySwitchFaceAuthenticationMode(void);

/**
 * @brief 播放切换二维码鉴权模式音效
 *
 */
extern void Wt588fPlaySwitchQrcodeAuthenticationModeAudio(void);

/**
 * @brief 播放设置状态音效
 *
 * @param Status - 状态(true:成功 false:失败)
 */
extern void Wt588fPlaySettingStatusAudio(bool Status);

/**
 * @brief 播放验证状态音效
 *
 * @param Status - 状态(true:成功 false:失败)
 */
extern void Wt588fPlayVerificationStatusAudio(bool Status);

/**
 * @brief 播放设备发现状态音效
 *
 * @param Status - 状态(true:成功 false:失败)
 */
extern void Wt588fPlayDeviceDiscoverStatusAudio(bool Status);

/**
 * @brief 播放恢复出厂状态音效
 *
 * @param Status - 状态(true:成功 false:失败)
 */
extern void Wt588fPlayFactoryResetStatusAudio(bool Status);

/**
 * @brief 播放权限不足音效
 *
 */
extern void Wt588fPlayPermissionDeniedAudio(void);

/**
 * @brief 播放设备繁忙音效
 *
 */
extern void Wt588fPlayEquipmentBusyStatusAudio(void);

/**
 * @brief 播放当前离合器状态
 *
 * @param Status - 状态(true:成功 false:失败)
 */
extern void Wt588fPlayCurrentLockStatusAudio(bool Status);

/**
 * @brief 播放当前网络质量音效
 *
 * @param Rssi - 信号增益
 */
extern void Wt588fPlayNetworkQualityAudio(uint8_t Rssi);

/**
 * @brief 播放常开模式状态音效
 *
 * @param Status - 状态(true:成功 false:失败)
 */
extern void Wt588fPlayNormallyOpenStatueAudio(bool Status);

/**
 * @brief 播放正在下发文件音效
 *
 */
extern void Wt588fPlayInitiateDocumentReceiptAudio(void);

/**
 * @brief 播放系统已锁定音效
 *
 */
extern void Wt588fPlaySystemLockAudio(void);

/**
 * @brief 播放低电压音效
 *
 */
extern void Wt588fPlayLowBatteryAudio(void);

/**
 * @brief 播放新增卡片音效
 *
 */
extern void Wt588fPlayAddNewCardAudio(void);

/**
 * @brief 播放通过键盘录入密钥音效
 *
 */
extern void Wt588fPlayEnterKeyViaTheKeyboardAudio(void);

/**
 * @brief 播放无效密钥音效
 *
 */
extern void Wt588fPlayLnvalidKeyValueAudio(void);

/**
 * @brief 播放录入密钥比对不一致音效
 *
 */
extern void Wt588fPlayPasswordComparisonIsInconsistentAudio(void);

/**
 * @brief 播放请再输入一遍密钥音效
 *
 */
extern void Wt588fPlayAuthenticationKeyInconsistencyAudio(void);

/**
 * @brief 播放通过人脸注册用户音效
 *
 * @param WaitSecond - 等待秒数
 */
extern void Wt588fPlayStartRegisterFaceEigenvaluesAudio(uint8_t WaitSecond);

/**
 * @brief 播放请正视摄像头音效
 *
 */
extern void Wt588fPlayLookMiddleAudio(void);

/**
 * @brief 播放请向上抬头音效
 *
 */
extern void Wt588fPlayLookUpAudio(void);

/**
 * @brief 播放请向下低头音效
 *
 */
extern void Wt588fPlayLookDownAudio(void);

/**
 * @brief 播放请向左摇头音效
 *
 */
extern void Wt588fPlayPlayLookLeftAudio(void);

/**
 * @brief 播放请向右摇头音效
 *
 */
extern void Wt588fPlayLookRightAudio(void);

/**
 * @brief 播放请按手指音效
 *
 */
extern void Wt588fPlayStartPrintingAudio(void);

/**
 * @brief 播放请在一遍手指音效
 *
 */
extern void Wt588fPlayReadmissionPrintingAudio(void);

/**
 * @brief 播放请扫码音效
 *
 */
extern void Wt588fPlayPleaseScanQrCodeAudio(void);

/**
 * @brief 播放用户注册状态音效
 *
 * @param Status - 状态(true:成功 false:失败)
 */
extern void Wt588fPlayUserRegistrationStatusAudio(bool Status);

/**
 * @brief 播放退出本地注册模式音效
 *
 */
extern void Wt588fPlayExitLocalRegisterAudio(void);

/**
 * @brief 播放退出验证模式音效
 *
 */
extern void Wt588fExitPlayExitVerificationModeAudio(void);

/**
 * @brief 播放设备处于初始化状态音效
 *
 */
extern void Wt588fPlayDeviceInTheInitializedState(void);

/**
 * @brief 播放授权即将到期音效
 *
 * @param Day - 剩余天数
 */
extern void Wt588fPlayExpirationReminderAudio(uint8_t Day);

/**
 * @brief 播放设备授权成功音效
 *
 */
extern void Wt588fPlayDeviceAuthorizationSuccessfulAudio(void);

/**
 * @brief 播放授权码已过期音效
 *
 */
extern void Wt588fPlayLicenseExpiredAudio(void);

/**
 * @brief 播放连接测试音效
 *
 */
extern void Wt588fPlayConnectTestAudio(void);

/**
 * @brief 播放自检失败提示音
 *
 * @param ErrorCode - 错误码
 */
extern void Wt588fPlaySelfTestErrorMessage(uint8_t ErrorCode);

/**
 * @brief 播放用户已存在音效
 *
 */
extern void Wt588fPlayUserAlreadyExistsAudio(void);

/**
 * @brief 播放验证管理员密码音效
 * 
 */
extern void Wt588fPlayVerifyAdminPasswordAudio(void);

/**
 * @brief 播放退出注册模式音效
 *
 */
extern void Wt588fPlayExitRegisterMethodAudio(void);

/**
 * @brief 播放请验证用户权限音效
 *
 */
extern void Wt588fPlayVerifyUserPermissionsAudio(void);

/**
 * @brief 播放提示设备反锁音效
 *
 */
extern void Wt588fPlayDeviceLockedMessageAudio(void);

/**
 * @brief 播放卡片已顶替音效
 *
 */
extern void Wt588fPlayCardReplacedAudio(void);

/**
 * @brief 播放卡片已过期音效
 *
 */
extern void Wt588fPlayCardExpiredAudio(void);

/**
 * @brief 播放提示注册用户数量音效
 *
 * @param SuccessCount - 成功数量
 * @param FailureCount - 失败数量
 */
extern void Wt588fPlayRegisterUserCountAudio(uint8_t SuccessCount, uint8_t FailureCount);

/**
 * @brief 播放剩余电量百分比音效
 *
 * @param Percentage - 剩余电量
 */
extern void Wt588fPlayRemainingBatteryPercentageAudio(uint8_t Percentage);

/**
 * @brief 进入睡眠模式
 *
 */
extern void Wt588fIntoSleep(void);

/**
 * @brief 初始化相关功能
 *
 */
extern void Wt588fConfiguration(void);

#endif
#endif
